import { MarkToolsConfig } from '../types';

function useMarkTool(config: MarkToolsConfig) {
  const { Map } = config;
  // 点击地图创建标注工具对象
  const clickMapcreateMarkTools = () => {
    return new T.MarkTool(Map, { follow: true });
  };
  const markTools = clickMapcreateMarkTools();

  // 指定经纬度向地图添加标注
  const addMarkToolIconExample = (lng: string | number, lat: string | number) => {
    const mark = new T.Marker(new T.LngLat(lng, lat));
    Map.addOverLay(mark);
    return mark;
  };

  // 获取点击地图后添加的所有标注点
  const getClickMapAddMarkPoint = () => {
    return markTools.getMarkers();
  };
  /**
   * 获取当前点击添加的标注数据;
   * currentLnglat:：用户在地图上标的坐标。
   * currentMarker：用户当前的标注点对象。
   * allMarkers：用户使用工具所有的标注点对象。
   *
   * */
  markTools.addEventListener('mouseup', (e) => {
    config.getCurrentMarkItems(e);
  });
  // 开启点击地图添加标注
  const openMarkToolIcon = () => {
    markTools.open();
  };

  // 关闭/清理标注
  const clearMarkToolIcon = (isAll = false): void => {
    if (isAll) {
      markTools.clear();
      return;
    }
    markTools.close();
  };

  /**
   * 为单个标注添加事件
   * @markItems 标注实例
   * */
  const addClickToMarkItem = (markItems: any, callback: Fn, event = 'click') => {
    markItems.addEventListener(event, callback);
  };

  return {
    openMarkToolIcon,
    clearMarkToolIcon,
    addMarkToolIconExample,
    getClickMapAddMarkPoint,
    addClickToMarkItem,
  };
}

export default useMarkTool;
